package pe.gob.foncodes.ssa.web.controller;

import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.ArrayList;
import java.util.Collection;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.apache.log4j.Logger;

import pe.gob.foncodes.ssa.bs.common.controller.GenericController;
import pe.gob.foncodes.ssa.bs.common.util.ServiceException;
import pe.gob.foncodes.ssa.bs.seguridad.domain.General;
import pe.gob.foncodes.ssa.web.beans.ControlAccesoBean;
import pe.gob.foncodes.ssa.web.util.Impresion;

public class ReporteControlAccesoController extends GenericController {

    protected static Logger log = Logger.getLogger(ReporteControlAccesoController.class);
    String busCodUsuario;
    String busNomUsuario;
    String busTipoOperacion;
    java.util.Date busFecRegDesde;
    java.util.Date busFecRegHasta;
    java.util.Date busFecSalDesde;
    java.util.Date busFecSalHasta;
    List<General> lstTipoOperacion;
    List<ControlAccesoBean> lstControlAcceso;

    @Override
    public void init() {
        this.lstControlAcceso = new ArrayList<ControlAccesoBean>();
        this.busTipoOperacion = null;
//        setBeanList(lstControlAcceso);
    }

    @Override
    public void search(ActionEvent event) throws Exception {
        log.info("Ejecutando filtro reporte");
        log.info(String.format("%s%s", "busCodUsuario:", busCodUsuario));
        log.info(String.format("%s%s", "busNomUsuario:", busNomUsuario));
        log.info(String.format("%s%s", "busTipoOperacion:", busTipoOperacion));
        log.info(String.format("%s%s", "busFecRegDesde:", busFecRegDesde));
        log.info(String.format("%s%s", "busFecRegHasta:", busFecRegHasta));
        log.info(String.format("%s%s", "busFecSalDesde:", busFecSalDesde));
        log.info(String.format("%s%s", "busFecSalHasta:", busFecSalHasta));
        
        this.busCodUsuario=(this.busCodUsuario == null)?null:this.busCodUsuario.trim().toUpperCase();
        this.busNomUsuario=(this.busNomUsuario == null)?null:this.busNomUsuario.trim().toUpperCase();
        
        String strNomUsuario = (this.busNomUsuario == null)?null:this.busNomUsuario + "%";
        if(this.busFecRegDesde == null || this.busFecRegHasta==null){            
            this.busFecRegDesde = null;
            this.busFecRegHasta=null;
        }
        
        if(this.busFecSalDesde == null || this.busFecSalHasta==null){            
            this.busFecSalDesde = null;
            this.busFecSalHasta=null;
        }
        
        Date fecRegDesde = (this.busFecRegDesde == null) ? null : new Date(this.busFecRegDesde.getTime());
        Date fecRegHasta = (this.busFecRegHasta == null) ? null : new Date(this.busFecRegHasta.getTime());
        Date fecSalDesde = (this.busFecSalDesde == null) ? null : new Date(this.busFecSalDesde.getTime());
        Date fecSalHasta = (this.busFecSalHasta == null) ? null : new Date(this.busFecSalHasta.getTime());
        
        log.info(String.format("%s%s", "fecRegDesde:", fecRegDesde));
        
        List<Object[]> olstControlAcceso = getService().findByNamedQuery("ControlAcceso.findByReporte", 
                                                                            new Object[]{this.busCodUsuario
                                                                                           , strNomUsuario
                                                                                           , this.busTipoOperacion
                                                                                           , fecRegDesde
                                                                                           , fecRegHasta
                                                                                           , fecSalDesde
                                                                                           , fecSalHasta});
        this.lstControlAcceso = new ArrayList<ControlAccesoBean>();
        
        for(Object[] obj: olstControlAcceso){
            ControlAccesoBean oControlAcceso = new ControlAccesoBean();
            oControlAcceso.setCOD_USUARIO((String)obj[0]);
            oControlAcceso.setNOMBRES((String)obj[1]);
            oControlAcceso.setTXT_MODULO((String)obj[2]);
            oControlAcceso.setTIPO_OPERACION((String)obj[3]);
            oControlAcceso.setFEC_REGISTRO((new SimpleDateFormat("dd/MM/yyyy")).format(obj[4]));
            oControlAcceso.setFEC_SALIDA((obj[5] == null)?null:(new SimpleDateFormat("dd/MM/yyyy")).format(obj[5]));
            this.lstControlAcceso.add(oControlAcceso);
        }        
        //setBeanList(this.lstControlAcceso);
    }

    public void limpiar() {
        this.busCodUsuario="";
        this.busNomUsuario="";
        this.busTipoOperacion=null;
        this.busFecRegDesde=null;
        this.busFecRegHasta=null;
        this.busFecSalDesde=null;
        this.busFecSalHasta=null;
        
        this.lstControlAcceso = new ArrayList<ControlAccesoBean>();
        //setBeanList(this.lstControlAcceso);
    }

    public void print() {
        try {
            Collection col = new ArrayList();
            for(ControlAccesoBean oControlAcceso: this.lstControlAcceso){
                col.add(oControlAcceso);
            }                    
            Impresion imprimir = new Impresion();
            imprimir.imprimirListado("ssa_rpt_usuarios_accesos", col);
        } catch (Exception ex) {
            log.error(ex);
        } finally {
            FacesContext.getCurrentInstance().responseComplete();
        }
    }
    
    @Override
    public boolean validate() throws Exception{
        boolean success = true;
        
        return success;
    }

    public String getBusCodUsuario() {
        return busCodUsuario;
    }

    public void setBusCodUsuario(String busCodUsuario) {
        this.busCodUsuario = busCodUsuario;
    }

    public java.util.Date getBusFecRegDesde() {
        return busFecRegDesde;
    }

    public void setBusFecRegDesde(java.util.Date busFecRegDesde) {
        this.busFecRegDesde = busFecRegDesde;
    }

    public java.util.Date getBusFecRegHasta() {
        return busFecRegHasta;
    }

    public void setBusFecRegHasta(java.util.Date busFecRegHasta) {
        this.busFecRegHasta = busFecRegHasta;
    }

    public java.util.Date getBusFecSalDesde() {
        return busFecSalDesde;
    }

    public void setBusFecSalDesde(java.util.Date busFecSalDesde) {
        this.busFecSalDesde = busFecSalDesde;
    }

    public java.util.Date getBusFecSalHasta() {
        return busFecSalHasta;
    }

    public void setBusFecSalHasta(java.util.Date busFecSalHasta) {
        this.busFecSalHasta = busFecSalHasta;
    }

    public String getBusNomUsuario() {
        return busNomUsuario;
    }

    public void setBusNomUsuario(String busNomUsuario) {
        this.busNomUsuario = busNomUsuario;
    }

    public String getBusTipoOperacion() {
        return busTipoOperacion;
    }

    public void setBusTipoOperacion(String busTipoOperacion) {
        this.busTipoOperacion = busTipoOperacion;
    }

    public List<ControlAccesoBean> getLstControlAcceso() {
        return lstControlAcceso;
    }

    public void setLstControlAcceso(List<ControlAccesoBean> lstControlAcceso) {
        this.lstControlAcceso = lstControlAcceso;
    }

    public List<General> getLstTipoOperacion() throws ServiceException {
        this.lstTipoOperacion = getService().findByNamedQuery("General.findByTxtDominioEstado"
                                                        , new Object[]{"TIPO_OPERACION","1"});                
        return this.lstTipoOperacion;
    }

    public void setLstTipoOperacion(List<General> lstTipoOperacion) {
        this.lstTipoOperacion = lstTipoOperacion;
    }
}